

#ifndef MdP
#define Mdp

#include "all2.h"


class MatriceDesPossibles {

    public:
        MatriceDesPossibles(vector<Piece> lp, int taille);

        //fonctions
      /*  vector<Po> poPossibles(Po piece, Coord c); //renvoi toutes les Po (pieces orientées) possibles à jouer sur la case de coord relative donnée en fonction de la Po piece posée.
        vector<Po> poImpossibles(Po piece, Coord c); //renvoi toutes les Po (pieces orientées) imterdites sur la case de coord relative donnée en fonction de la Po piece posée.
        */
        vector<Po> poPossibles(vector<Po> vecteur); //renvoi une copie du vecteur avec toutes les pieces à false en moins.
        vector<Po> vpo(Po piece, Coord c); //renvoi le vecteur correspondant à la demande dans la table.
        bool possible(Po piece, Coord c, Po piece2); //renvoi true si la piece piece2 posée en c par rapport à piece ne crée pas de conflit avec la piece piece.
        //void majPlateau(vector<vector<Case> > * plateau); //modifie toutes les cases  de la matrice des cases jouables.
        int coordToInt(int x, int y); //renvoi le nuemro de colone dans la matrice correspondant à la coordonée.
        int coordToInt(Coord c); //surcharge
        Po intToPo(int i); //prend un int et renvoi la piece orientée correspondante
        int poToInt(Po pieceOriente); //renvoi l'integer correspondant à la po donnée.
        vector<Po> getLpo();
    private:
        vector<vector<vector<Po> > > matrice;   // x représente l'ensemble des pieces existantes, y une coord relative, eet z les pieces possibles à cette coord par rapport à la piece x. Le booléen de la piece marque son utilisabilité.
                                                //  le booléen de la piece sert donc à savoir si elle est jouable ou pas sur la case y en tenant compte qu'il y a une piece x. (y est en coordonée relative par rapport à la piece x défini).
        vector<Po> lpo;//liste de pieces orientées

};

#endif
